/**
 * @Author: 陈瑞鹏
 * @Date:   2022-12-05 17:39:02
 * @Last Modified by:   陈瑞鹏
 * @Last Modified time: 2022-12-06 09:27:33
 */
import { Proxy } from "../pureMvc/patterns/proxy/Proxy";

const { ccclass, property } = cc._decorator;

/**
 * @classdesc 配合「ScrollViewPlus」组件使用的ScrollViewItem组件
 * @author caizhitao
 *
 * 用法：
 *
 *      1. 将本组件挂载在Item节点上
 * 		2. 在属性面板上指定事件数组回调，即可监听 Item 「进入」和「离开」ScrollView可视区域的事件
 *
 */
@ccclass
export default class ScrollViewPlusItem extends cc.Component {

  @property({
    type: [cc.Component.EventHandler],
    tooltip: "进入ScrollView时回调"
  })
  onEnterScrollViewEvents: cc.Component.EventHandler[] = [];

  @property({
    type: [cc.Component.EventHandler],
    tooltip: "离开ScrollView时回调"
  })
  onExitScrollViewEvents: cc.Component.EventHandler[] = [];

  @property({
    type: [cc.Component.EventHandler],
    tooltip: "进入ScrollView之后，位置发生改变时回调"
  })
  onPositionChangeEvents: cc.Component.EventHandler[] = [];
  /**
    * 当前是否在展示中
    *
    * 1. 在进入和离开ScrollView期间，为true
    * 2. 在离开ScrolLView期间，为false
    */
  isShowing: boolean = false;

  /**
   * item 进入scrollView 的时候回调
   */
  publishOnEnterScrollView() {

    if (this.onEnterScrollViewEvents.length == 0) return;

    this.onEnterScrollViewEvents.forEach((event) => {

      event.emit([]);
    })
  }

  /**
   * item 离开scrollview 的时候回调
   */
  publishOnExitScrollView() {

    if (this.onExitScrollViewEvents.length == 0) return;

    this.onExitScrollViewEvents.forEach((event) => {

      event.emit([]);
    })
  }

  /**
   * item 进入scrollview 后，item位置发生移动时回调，离开scrollview 后不会回调
   * @param xOffsetPercent 相对于scrollview 可视区域中心点，x的偏移量百分比，取值范围[0,1]
   * @param yOffsetPercent 相对于scrollview 可视区域中心点，y的偏移量百分比，取值范围[0,1]
   */
  publishOnPositionChange(xOffsetPercent: number, yOffsetPercent: number) {

    if (this.onPositionChangeEvents.length == 0) return;

    this.onPositionChangeEvents.forEach((event) => {

      event.emit([xOffsetPercent, yOffsetPercent]);
    })
  }

}